package com.test.springboot.jpa.pojo;

import lombok.Data;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/8/18 2:24
 * @package com.test.springboot.jpa.pojo
 * @description 根据实体类自动创建 表
 *              Java类型和对应的表属性关系
 *              JPA 常见注解 和 操作
 */

@Entity //指定当前类是实体类，对应数据库中的一个表
@Data
@Table(name = "tb_create_table")
@EntityListeners(AuditingEntityListener.class)// 封装生成自动时间
public class CreateTable implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 设定主键生成策略：IDENTITY 表示由数据库自动生成
    private Long id; // Long 对应 MySQL 数据库的 bigint 类型

    @Column(name = "string_value",nullable = false,unique = true,length = 20) //  不为空，唯一，且字符最大长度为 20
    private String stringValue; // String 对应 MySQL 数据库中的 varchar 类型

    @Column(name = "integer_value")
    private Integer integerValue = 3; // 赋值默认值

    @Column(name = "double_value")
    private Double doubleValue;

    /**
     * 自动生成时间：create 生效
     */
    @CreatedDate
    @Column(name = "create_time")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 定义时间格式
    private Date createTime;

    /**
     * 自动生成时间：update 生效
     */
    @LastModifiedDate
    @Column(name = "update_time")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 定义时间格式
    private Date updateTime;

    @Transient //如果你想要Entity中的某个属性不被识别为表字段，可以用@Transient注解标记。
    private String transientValue;
}
